# APP
__app_driver = None

# 创建或获取驱动的对象的公用方法
# 1、创建驱动对象时需要将创建好的窗口存储到私有属性__admin_driver中也就是要修改该变量值而只有类级别的方法才有权限修改
# 2、如果以实例属性的方式存储浏览器驱动对象,那么在调用方法时就必须创建UtilsDriver的实例对象,每次创建实例对象,其对应的实例
# 属性都不是同一个,产生的结果还是会打开多个浏览器
@classmethod
def get__app_driver(cls):
    # 如果__admin_driver当前不为空，则代表代码之前已经打开浏览器,那么只需要直接返回已经打开的浏览器驱动对象即可，不需要重新创建
    if cls.__app_driver is None:
        # 手机端启动参数
        desired_caps = dict()
        # 代表被测试的手机系统型号:IOS 和 Android
        desired_caps['platformName'] = 'Android'
        # 代表被测模拟器/手机系统的版本号,可以写部分版本号，但是不能写错
        desired_caps['platformVersion'] = '5.1'
        # 随便写，但是不能不写
        desired_caps['deviceName'] = '323232'
        # 要启动的应用包名
        desired_caps['appPackage'] = 'com.tencent.news'
        # 要启动的界面名
        desired_caps['appActivity'] = '.activity.SplashActivity'
        # 创建驱动对象
        cls.__app_driver = appium.webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
        # 隐式等待
        cls.__app_driver.implicitly_wait(10)
    # 返回创建好的驱动对象
    return cls.__app_driver

# 关闭BUYER门户网站驱动对象的方法
@classmethod
def quit__app_driver(cls):
    # 为加强代码的健壮,防止在没有创建驱动对象之前直接调用关闭驱动对象的方法导致出错的情况则加上判断是否有打开的浏览器
    if cls.__app_driver is not None:
        # 1、直接拿到驱动对象之后调用quit()会关闭浏览器窗口,但是不会清除__admin_driver中的缓存值,如果不清楚,则再次调用get_admin_driver就不会
        # 打开浏览器窗口
        cls.__app_driver.quit()
        # 2、实例方法不能直接修改私有属性所以需要将方法修改为类级别的方法
        cls.__app_driver = None